#include<iostream>
#include<vector>
#include<cstdio>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<functional>
#include"task.h"
using namespace std;

//定义了一个类型，返回值是void，task_t的函数类型
typedef function<void()> task_t;
void LoadTask(vector<task_t>& tasks)
{
  tasks.push_back(PrintLog);
  tasks.push_back(DownLoad);
  tasks.push_back(BackUp);
}


int main()
{
  vector<task_t> tasks;
  LoadTask(tasks);
  pid_t id=fork();
  if(id==0)
  {
    //子进程
    while(true)
    {
      printf("我是子进程，pid:%d\n",getpid());
      sleep(1);
    }
    exit(0);
  }

  //父进程
  while(true)
  {
    sleep(1);
    //非阻塞等待
    pid_t rid=waitpid(id,nullptr,WNOHANG);
    if(rid>0)
    {
      printf("等待子进程%d成功\n",rid);
      break;
    }
    else if(rid<0)
    {
      printf("等待子进程失败\n");
      break;
    }
    else 
    {
      printf("子进程尚未退出\n");
      //做自己的事情
      for(auto &task:tasks)
      {
        task();
      }
    }
  }
  return 0;
}
